package com.nativelibs4java.opencl;
import static com.nativelibs4java.util.NIOUtils.directBuffer;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import java.nio.IntBuffer;
import org.junit.BeforeClass;
import org.junit.Test;
import com.nativelibs4java.test.MiscTestUtils;
/**
*
* @author Kazó Csaba
*/
@SuppressWarnings("unchecked")
public class BinaryKernelTest extends AbstractCommon {
@BeforeClass
public static void setup() {
MiscTestUtils.protectJNI();
}
@Test
public void simpleTest() throws CLBuildException {
CLProgram program = context.createProgram(
"__kernel void copy(__global int* a, __global int* b) {\n" +
" int i = get_global_id(0);\n" +
" b[i]=a[i];\n" +
"} ");
program.build();
Map<CLDevice, byte[]> binaries = program.getBinaries();
program.release();
CLProgram binaryProgram = context.createProgram(binaries);
CLKernel kernel=binaryProgram.createKernel("copy");
CLIntBuffer a=context.createIntBuffer(CLMem.Usage.Input, 4);
CLIntBuffer b=context.createIntBuffer(CLMem.Usage.Output, 4);
IntBuffer source = directBuffer(4, context.getByteOrder(), IntBuffer.class);
for (int i=0; i<4; i++)
source.put(i, 3*i+10);
a.write(queue, source, true);
kernel.setArgs(a, b);
kernel.enqueueNDRange(queue, new int[]{4}, new int[]{1}).waitFor();
IntBuffer target = b.read(queue);
assertEquals(target.capacity(), source.capacity());
for (int i=0; i<4; i++)
assertEquals(source.get(i), target.get(i));
}
}